# -*- coding: utf-8 -*-
"""
Created on Wed Nov 26 18:17:02 2025

@author: JSJSYS
"""

import numpy as np

def quantize_to_chars(image, levels=5):
    """
    将图像量化为指定级别并用字符表示
    """
    # 字符对应亮度：' '最暗，'#'最亮
    chars = [' ', '.', '-', '+', '#']
    
    # 计算量化边界
    min_val = np.min(image)
    max_val = np.max(image)
    step = (max_val - min_val) / levels
    
    # 创建量化后的字符图像
    char_image = []
    for i in range(image.shape[0]):
        row = []
        for j in range(image.shape[1]):
            value = image[i, j]
            # 确定所属级别
            level = min(int((value - min_val) / step), levels - 1)
            row.append(chars[level])
        char_image.append(''.join(row))
    
    return char_image

# 第1步：创建特殊图像 - 乐高风格32x32图像
print("创建乐高风格数字图像...")
print("=" * 50)

# 创建4x4的随机积木块颜色（每个值代表一个8x8块的颜色）
block_colors = np.random.randint(0, 256, (4, 4))
print("积木块基础颜色矩阵 (4x4):")
print(block_colors)

# 扩展为32x32的完整图像（每个块扩展为8x8像素）
image_32x32 = np.zeros((32, 32), dtype=int)

for i in range(4):
    for j in range(4):
        # 每个8x8块填充相同的颜色值
        image_32x32[i*8:(i+1)*8, j*8:(j+1)*8] = block_colors[i, j]

print(f"\n生成的乐高图像形状: {image_32x32.shape}")
print(f"像素值范围: {np.min(image_32x32)} - {np.max(image_32x32)}")

# 第2步：5种不同的处理实验
print("\n" + "="*50)
print("5组不同的处理实验:")
print("="*50)

# 第1组：基础版本 - 直接显示原图
print("\n第1组 - 基础版本 (原始乐高图像):")
print("每个8x8块颜色均匀，显示清晰的积木结构")
quantized_1 = quantize_to_chars(image_32x32)
for row in quantized_1:
    print(row)

# 第2组：调亮版本 - 让整张图变得更亮
brightened = np.clip(image_32x32 + 80, 0, 255)
print("\n第2组 - 调亮版本 (+80亮度):")
print("整体变亮，更多像素进入高亮度区域")
quantized_2 = quantize_to_chars(brightened)
for row in quantized_2:
    print(row)

# 第3组：调暗版本 - 让整张图变得更暗
darkened = np.clip(image_32x32 - 80, 0, 255)
print("\n第3组 - 调暗版本 (-80亮度):")
print("整体变暗，更多像素进入低亮度区域")
quantized_3 = quantize_to_chars(darkened)
for row in quantized_3:
    print(row)

# 第4组：增强对比度 - 让亮的更亮、暗的更暗
print("\n第4组 - 增强对比度:")
print("亮的区域更亮，暗的区域更暗，对比更明显")
contrast_enhanced = np.clip((image_32x32 - 128) * 1.5 + 128, 0, 255).astype(int)
quantized_4 = quantize_to_chars(contrast_enhanced)
for row in quantized_4:
    print(row)

# 第5组：局部特写 - 只显示图像的中心区域
print("\n第5组 - 局部特写 (中心8x8区域):")
print("放大显示图像中心的一个积木块")
center_crop = image_32x32[12:20, 12:20]  # 中心8x8区域
quantized_5 = quantize_to_chars(center_crop)
for row in quantized_5:
    print(row)

# 附加信息显示
print("\n" + "="*50)
print("处理效果分析:")
print("="*50)

print(f"原始图像统计:")
print(f"  最小值: {np.min(image_32x32)}, 最大值: {np.max(image_32x32)}")
print(f"  平均值: {np.mean(image_32x32):.1f}, 标准差: {np.std(image_32x32):.1f}")

print(f"\n调亮后统计:")
print(f"  最小值: {np.min(brightened)}, 最大值: {np.max(brightened)}")
print(f"  平均值: {np.mean(brightened):.1f}")

print(f"\n调暗后统计:")
print(f"  最小值: {np.min(darkened)}, 最大值: {np.max(darkened)}")
print(f"  平均值: {np.mean(darkened):.1f}")

print(f"\n字符亮度对应关系:")
chars = [' ', '.', '-', '+', '#']
print("  ' ' → 最暗 (0-20%)")
print("  '.' → 较暗 (20-40%)")  
print("  '-' → 中等 (40-60%)")
print("  '+' → 较亮 (60-80%)")
print("  '#' → 最亮 (80-100%)")